package main

/*
* Content: 变量声明-初始化方式、基础变量、基础常量
* --------------------------------------------------
* Go语言基础之变量和常量: https://www.liwenzhou.com/posts/Go/var-and-const/
* Go基础数据类型使用实战(int、float、bool): https://juejin.cn/post/7068457967133130782
 */

import (
	"fmt"
)

var way10 int = 10 // 正确全局变量
// way11 := 11     // 函数外不能使用 :=

func MyBase() {

	// 赋值方式
	fmt.Println("--------------------数据声明-初始化方式--------------------")

	var way0_1 int // 单变量声明
	fmt.Printf("way0_1类型: %T, way0_1: %v\n", way0_1, way0_1)

	var ( // 批量声明(不赋值)
		way0_2 int
		way0_3 string
	)
	fmt.Printf("way0_2: %v, way0_3: %v\n", way0_2, way0_3)

	var way1 int = 11 // 常规初始化--最 不 常用的初始化方式
	fmt.Printf("way1: %v\n", way1)

	var way2 = 12 // 初始化-省略类型
	fmt.Printf("way2: %v\n", way2)

	way3 := 13 // 最常用的初始化方式
	fmt.Printf("way3: %v\n", way3)

	way4, way5 := 14, 15 // 初始化多个变量
	fmt.Printf("way4: %v, way5:%v\n", way4, way5)

	way4, way5 = way5, way4
	fmt.Printf("way4: %v, way5:%v\n", way4, way5)

	way6, _ := 16, 17 // 匿名变量
	fmt.Printf("way6: %v\n", way6)

	// 基础变量
	fmt.Println("--------------------基础变量--------------------")

	var myInt int = 10
	fmt.Printf("int: %v\n", myInt)

	var myInt32 int32 = 11 // 定义方式一 (int8、int16、int32、int64)
	fmt.Printf("int32: %v\n", myInt32)

	myInt64 := int64(12) // 定义方式二 (int8、int16、int32、int64)
	fmt.Printf("int64: %v\n", myInt64)

	var myFloat32 float32 = 1.2
	fmt.Printf("float32: %v\n", myFloat32)

	var myFloat64 float64 = 1.2
	fmt.Printf("float64: %v\n", myFloat64) // 小数默认是float64

	var myByte byte = 'x' // 相当于 int8
	fmt.Printf("byte: %v\n", myByte)

	var myRune rune = '谢' // 相当于 int32
	fmt.Printf("rune: %v\n", myRune)

	var myBool bool = true
	fmt.Printf("bool: %v\n", myBool)

	var int_8 = 077                  // 八进制
	fmt.Printf("int_8: %d\n", int_8) //(%b:二进制、%d:十进制、%o:八进制、%x:十六进制)

	var int_16 = 0x77 // 十六进制
	fmt.Printf("int_16: %d\n", int_16)

	// 基础常量
	fmt.Println("--------------------基础常量--------------------")

	const myConst int = 816 // 必须要初始化
	const pi = 3.1415       // 省略类型
	fmt.Printf("myConst: %v, pi: %v\n", myConst, pi)

	const ( // 批量初始化
		con1 = 10
		con2 = 12
	)

	const (
		myIota1          = iota       // iota = 0
		_                             // iota = 1
		myIota2          = iota * 10  // iota = 2
		myIota3, myIota4 = iota, iota // iota = 3
	)
	fmt.Printf("myIota1: %v, myIota2: %v\n", myIota1, myIota2)
	fmt.Printf("myIota3: %v, myIota4: %v\n", myIota3, myIota4)

}
